#e[Package]
#Title["Maiden's Exhibition -B̒eW- ver0.01a"]
#Text["Maiden's Exhibition ver0.01a"]
#System["./system/System.txt"]
#Player["./player/Marisa/Marisa.txt","./player/Reimu/Reimu.txt"]

#include".\lib/BossCommon/SpellList.txt"

let PlayerCharacter;
let SoundFlag=1;
let StageMusicFlag=1;
let StageMusicStopFlag=0;
let DemoFlag=0;

let SpellCardInfo_Text=[];
let SpellCardInfo_Get=[];
let SpellCardInfo_Challenge=[];

@Initialize{T_Main();}

@MainLoop{yield;}

@Finalize{}

task T_Main
{
	yield;
	if(LoadCommonDataAreaA1("SPELL_RECORD"))
	{
		LoadCommonDataAreaA1("TUNING");
	}
	else
	{
		let Spell_C_Array=[];
		let Spell_G_Array=[];
		let Spell_Score_Array=[];
		let Spell_First_Array=[];
		let Spell_Early_Array=[];
		let Spell_Favorite_Array=[];
		loop(100)
		{
			Spell_C_Array=Spell_C_Array~[0];
			Spell_G_Array=Spell_G_Array~[0];
			Spell_Favorite_Array=Spell_Favorite_Array~[0];
			Spell_Score_Array=Spell_Score_Array~[0];
			Spell_First_Array=Spell_First_Array~[0];
			Spell_Early_Array=Spell_Early_Array~[100000];
		}

		CreateCommonDataArea("SPELL_RECORD");
		SetAreaCommonData("SPELL_RECORD","Reimu_Challenge",Spell_C_Array);
		SetAreaCommonData("SPELL_RECORD","Reimu_Get",Spell_G_Array);
		SetAreaCommonData("SPELL_RECORD","Reimu_Score",Spell_Score_Array);
		SetAreaCommonData("SPELL_RECORD","Reimu_First",Spell_First_Array);
		SetAreaCommonData("SPELL_RECORD","Reimu_Early",Spell_Early_Array);

		SetAreaCommonData("SPELL_RECORD","Marisa_Challenge",Spell_C_Array);
		SetAreaCommonData("SPELL_RECORD","Marisa_Get",Spell_G_Array);
		SetAreaCommonData("SPELL_RECORD","Marisa_Score",Spell_Score_Array);
		SetAreaCommonData("SPELL_RECORD","Marisa_First",Spell_First_Array);
		SetAreaCommonData("SPELL_RECORD","Marisa_Early",Spell_Early_Array);

		CreateCommonDataArea("TUNING");
		SetAreaCommonData("TUNING","BGM",1);
		SetAreaCommonData("TUNING","PlayerCharacter",0);
		SetAreaCommonData("TUNING","SelectIndex",0);
		SetAreaCommonData("TUNING","SelectPageIndex",0);
		SetAreaCommonData("TUNING","SortType",0);
		SetAreaCommonData("TUNING","PlayerName","NEMO");
		SetAreaCommonData("TUNING","FavoriteMode",0);
		SetAreaCommonData("TUNING","Favorite",Spell_Favorite_Array);
		SetAreaCommonData("TUNING","Setting",[100,100,1,1]);
	}
	yield;
	TTitleScene();
	T_Sound();
}


//----------------------------------------------------
// ^CgV[
//----------------------------------------------------

task T_Sound
{
	let objMusic=ObjSound_Create;
	ObjSound_Load(objMusic,GetCurrentScriptDirectory~"bgm/menu.ogg");
	ObjSound_SetLoopEnable(objMusic,true);
//	ObjSound_SetLoopTime(objMusic,46.439,107.369);
	let MaxVulume=GetAreaCommonData("TUNING","Setting",[])[0];
	if(SoundFlag==1)
	{
		ObjSound_Play(objMusic);
/*
		if(GetAreaCommonData("TUNING","BGM",1)==1)
		{
			ObjSound_SetVolumeRate(objMusic,80);
		}
		else
		{
			ObjSound_SetVolumeRate(objMusic,0);
		}
*/
		while(SoundFlag)
		{
			MaxVulume=GetAreaCommonData("TUNING","Setting",[])[0];
			ObjSound_SetVolumeRate(objMusic,MaxVulume);
			yield;
		}
		ObjSound_SetFade(objMusic,-40);
		loop(60){yield;}
	}
	Obj_Delete(objMusic);
}

task TTitleScene
{
	SpellCardInfo_Text=[];
	SpellCardInfo_Get=[];
	SpellCardInfo_Challenge=[];
	SoundFlag=1;
	StageMusicFlag=0;
	PlayerCharacter = GetAreaCommonData("TUNING","PlayerCharacter",1);//vC[
	let SortType	= GetAreaCommonData("TUNING","SortType",1);//\[g@
	let FavoriteMode= GetAreaCommonData("TUNING","FavoriteMode",0);//tFCobg[h
	//^CgV[ItO
	let bEndTitleScene = false;

	//^CgpXݒ
	let dir = GetCurrentScriptDirectory();
	let pathTitle = dir ~ "system/img/Title.png";

	let objTitleImage = ObjPrim_Create(OBJ_SPRITE_2D); //2DXvCgIuWFNg
	Obj_SetRenderPriorityI(objTitleImage, 20); //`Dxݒ
	ObjPrim_SetTexture(objTitleImage, pathTitle); //eNX`ݒ
	ObjSprite2D_SetSourceRect(objTitleImage, 0, 0, 640, 480);
	ObjSprite2D_SetDestRect(objTitleImage, 0, 0, 640, 480);

	//^Cg
	let objTitleText = ObjText_Create();
	ObjText_SetText(objTitleText, "No @SpellCard  @@@@@@@@@@@Difficult        Memory");
	ObjText_SetFontSize(objTitleText, 14+4);
	ObjText_SetFontBold(objTitleText, true);
	ObjText_SetFontColorTop(objTitleText, 255, 255, 255);
	ObjText_SetFontColorBottom(objTitleText, 160, 160, 255);

	ObjText_SetFontBorderType(objTitleText, BORDER_NONE);
	ObjText_SetFontBorderColor(objTitleText,255, 255, 255);
	ObjText_SetFontBorderWidth(objTitleText, 2*0);
	Obj_SetRenderPriorityI(objTitleText, 30);
	ObjRender_SetX(objTitleText, 14);
	ObjRender_SetY(objTitleText, 14);

	ObjText_SetFontType(objTitleText,"lr ");

/*************^CgeLXg\^XN****************************/
	task TMenuItem
	{
		function CreateTextObject(let mx, let my, let text)
		{
			let obj = ObjText_Create();
			ObjText_SetText(obj, text);
			ObjText_SetFontSize(obj, 14+4);
			ObjText_SetFontBold(obj, true);
			ObjText_SetFontColorTop(obj, 255, 255, 255);

			ObjText_SetFontBorderType(obj, BORDER_NONE);
			ObjText_SetFontBorderColor(obj,255, 255, 255);
			ObjText_SetFontBorderWidth(obj, 2*0);
			Obj_SetRenderPriorityI(obj, 72);
			ObjRender_SetX(obj, mx);
			ObjRender_SetY(obj, my);

			ObjText_SetFontType(obj,"lr ");
			Obj_SetValue(obj,"BaseAlpha",255);
			return obj;
		}

		let mx = 14;
		let my = 14+25;
		let objTextArray=[];
		ascent(i in 0..12)
		{
			objTextArray = objTextArray~[CreateTextObject(mx, my+i%12*25, "")];
		}
		let AlphaRate=1;

		let OldPage=selectPageIndex;

		let R=255;let G=255;let B=255;
		let Alpha=255;
		while(!bEndTitleScene)
		{
			ascent(i in 0..12)
			{
				if(length(SpellCardInfo_Text)>i+selectPageIndex*12)
				{//J[hmizjȉȂ\
					ObjText_SetText(objTextArray[i], SpellCardInfo_Text[i+selectPageIndex*12]);
					ObjRender_SetX(objTextArray[i], mx);
					if(SpellCardInfo_Challenge[i+selectPageIndex*12]>=1)
					{//Xy擾󋵂ɂĐF
						if(SpellCardInfo_Get[i+selectPageIndex*12]>=1)
						{
							R=128;G=255;B=192;
						}
						else
						{
							R=255;G=64;B=64;
						}
					}
					else
					{
						R=255;G=255;B=255;
					}
					ObjText_SetFontColorBottom(objTextArray[i], R, G, B);
				}
				else
				{//J[hmizj牽\Ȃ
					ObjText_SetText(objTextArray[i], "");
				}

				if(selectIndex%12==i)
				{//IsƑ̍sAlphalύX
					ObjRender_SetAlpha(objTextArray[i],Alpha);
				}
				else
				{
					ObjRender_SetAlpha(objTextArray[i],Alpha*0.6);
				}
			}

			OldPage=selectPageIndex;
			
			yield;

			if(OldPage!=selectPageIndex && !FavoriteMode)
			{//؁[WύXt@{[hȂȂύXGtFNg
				let dir=1;
				if(OldPage+1==selectPageIndex || (selectPageIndex==0 && OldPage==3) )
				{
					dir=1;
				}
				else
				{
					dir=-1;
				}
				ascent(i in 0..12)
				{
					if(length(SpellCardInfo_Text)>i+OldPage*12)
					{
						if(SpellCardInfo_Challenge[i+OldPage*12]>=1)
						{
							if(SpellCardInfo_Get[i+OldPage*12]>=1)
							{
								R=128;G=255;B=192;
							}
							else
							{
								R=255;G=64;B=64;
							}
						}
						else
						{
							R=255;G=255;B=255;
						}

						if(selectIndex%12==i)
						{
							CreateEffectText(mx, my+i%12*25,SpellCardInfo_Text[i+OldPage*12],dir,R,G,B,Alpha);
						}
						else
						{
							CreateEffectText(mx, my+i%12*25,SpellCardInfo_Text[i+OldPage*12],dir,R,G,B,Alpha*0.6);
						}
					}
				}
				CtrlAlpha(dir);
			}
		}
		ascent(i in 0..12)
		{//^CgV[Iɍ폜
			Obj_Delete(objTextArray[i]);
		}

/*************y[WύXGtFNg^XN(lXgj*********************/
		task CtrlAlpha(dir)
		{
			mx = 14+100*dir;
			Alpha=0;
			loop(10)
			{
				mx-=10*dir;
				Alpha+=255/10;
				yield;
			}
		}

		task CreateEffectText(let mx, let my, let text,dir,R,G,B,Alpha)
		{
			let obj = ObjText_Create();
			ObjText_SetText(obj, text);
			ObjText_SetFontSize(obj, 14+4);
			ObjText_SetFontBold(obj, true);
			ObjText_SetFontColorTop(obj, 255, 255, 255);

			ObjText_SetFontBorderType(obj, BORDER_NONE);
			ObjText_SetFontBorderColor(obj,R,G,B);
			ObjText_SetFontBorderWidth(obj, 2*0);
			Obj_SetRenderPriorityI(obj, 72);
			ObjRender_SetX(obj, mx);
			ObjRender_SetY(obj, my);

			ObjText_SetFontType(obj,"lr ");
			ObjText_SetFontColorBottom(obj, R, G, B);

			let BaseAlpha=Alpha;
			loop(10)
			{
				mx-=100/10*dir;
				Alpha-=BaseAlpha/10;
				ObjRender_SetX(obj, mx);	
				ObjRender_SetAlpha(obj,Alpha);
				yield;
			}
			Obj_Delete(obj);
		}
/*************y[WύXGtFNg^XN(lXgjI*********************/
	}

/*************^CgeLXg\^XNI*************************/

	yield;//ꉞב΍

	//j[zu
	let mx = 14;
	let my = 14+25;
	let SpellCardSetting=[
	["u_[NlXT[Wv","","[~A"],
	["ut[YT[v","","`m"],
	["uF̕v","","d"],
	["uCtFiOAv","",""],
	["uCWO~Xgv","","p`[Em[bW"],
	["u^b`JPv","","Xǁ@P"],
	["uՁE莖rv","",""],
	["uSS̎v","","s@HXq"],
	["uGR[P[Vv","","HJ@q"],
	["ufrHDv","","с@"],
	["u|CYtFU[v","","fBXER["],
	["u꓁Uv","","鮁@d"],
	["ue绁v","","@Ă"],
	["uʑiEFCuVt^[jv","","ED܉؉@ECio"],
	["uXvOEGtFv","","[zCg"],
/*
	["uubNAEgLms[v","","[~A"],
	["utFC^t[WAv","","`m"],
	["ugbL[Obhv","","d"],
	["uz{v","","[zCg"],
	["uuCh[Cv","","~XeBAE[C"],
	["uVnv","","˖ہ@"],
	["uAJ[CXgv","","с@"],
	["u~v","","s@HXq"],
	["u\EXeB[[v","",""],
	["uAEhtAv","","GH@"],
	["uJ[h[rbgv","","@Ă"],
	["uCNOiA[~VFCNjv","","ED܉؉@ECio"],

	["ue_[nVlCVv","","fBXER["],
	["utFjbNXetv","","@g"],
	["uXy[XC[^[v","","\Z@"],
	["uX^[_XgeCv","","X^[Tt@CA"],
	["u[fBG[Vv","","i`Ch"],
	["u\[CY[U[v","","Tj[~N"],
	["u~XeB[Ov","","p`[Em[bW"],
	["ufCW[N[[v","","@H"],
	["u鮓jMv","","鮁@d"],
	["uh[~OWGv","","HR@P"],
	["ugDSBVe̍gv","","~AEXJ[bg"],
	["uCfbZgGuCXv","","th[EXJ[bg"],

	["uSӉ΋ʁv","","ɐ@"],
	["uOr̜frv","","ˁ@"],
	["uԂ̗ev","","b@ʂ"],
	["uԒe]Ev","","_@"],
	["ul`ov","","AXE}[KgCh"],
	["uق̓Vv","","i]@ߋ"],
	["ug˓V@v","",""],
	["u̐_ρv","","_@"],
	["uqf̐_v","","J@c"],
	["uӋCՓV̌Mv","","ߖ@Vq"],
	["uI[EF[uv","",""],
	["uv","","Bc@"],

	["uVjӋ|v","","Ӂ@i"],
	["uP𐳂v","","lGfPE}UihD"],
	["uGXJgXI[fB[v","","_Y"],
	["uA܁v","","g@"],
	["uAXRrigAv","","~[Y"],
	["uẌÂv","","[~A"],
	["uVv[XvOv","","[zCg"],
	["uMkK̐[v","",""],
	["uu[J[oNv","","HR@P"],
	["u}CMNV[v","",""]
*/
	];

	/*********************\[g***************************/
	alternative(SortType)
	case(0){}//ftHg
	case(1)
	{//i
		ascent(i in 0..length(SpellCardSetting))
		{
			ascent(j in i..length(SpellCardSetting))
			{
				if(GetNameNumber(SpellCardSetting[i][2])>GetNameNumber(SpellCardSetting[j][2]))
				{
					let Temp=SpellCardSetting[i];
					SpellCardSetting[i]=SpellCardSetting[j];
					SpellCardSetting[j]=Temp;
				}
			}
		}
	}	
	case(2)
	{//Փx
		ascent(i in 0..length(SpellCardSetting))
		{
			ascent(j in i..length(SpellCardSetting))
			{
				if(SpellCardSetting[i][1]>SpellCardSetting[j][1])
				{
					let Temp=SpellCardSetting[i];
					SpellCardSetting[i]=SpellCardSetting[j];
					SpellCardSetting[j]=Temp;
				}
			}
		}
	}
	/******************\[gI*************************/

	let texts=[];
	let Name_texts=[];
	let SpellName_texts=[];

	let C_Array=[];
	let G_Array=[];
	alternative(PlayerCharacter)
	case(0)
	{
		C_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Challenge",[]);
		G_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Get",[]);
	}
	case(1)
	{
		C_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Challenge",[]);
		G_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Get",[]);
	}

	ascent(i in 0..length(SpellCardSetting))
	{
	SetSpellCardNumber(SpellCardSetting[i][0]);//ʃf[^"SpellNumber"ɖOɉČŒԍ
	if(GetAreaCommonData("TUNING","Favorite",[0])[GetCommonData("SpellNumber",0)]==1 || FavoriteMode==0)
	{//t@{[h̎͂ӂڂĂ̂
		SpellName_texts=SpellName_texts~[SpellCardSetting[i][0]];
		Name_texts=Name_texts~[SpellCardSetting[i][2]];
		if(C_Array[GetCommonData("SpellNumber",0)]>=1)
		{
			texts=texts~[SpellCardSetting[i][0]];
		}
		else
		{
			texts=texts~["ҕW"];
		}

		SetSpellCardNumber(SpellCardSetting[i][0]);
		let AddStr;

	/****3ɂȂ悤ɓ0ĂǍXy[Xǉ*****/
		if(i+1<10)
		{
			AddStr="00"~IntToString(i+1);
		}
		else if(i+1<100)
		{
			AddStr="0"~IntToString(i+1);
		}
		else
		{
			AddStr=IntToString(i+1);
		}

	/****Cɓ肾******/

		SetSpellCardNumber(SpellCardSetting[i][0]);
		let F_Array=GetAreaCommonData("TUNING","Favorite",[0]);
		if(F_Array[GetCommonData("SpellNumber",0)]==1)
		{
			AddStr=AddStr~"*";
		}
		else
		{
			AddStr=AddStr~" ";
		}

	/************XyǉXy[XŒ*****************/
		texts[i]=AddStr~texts[i];

		while(length(texts[i])<38)
		{
			texts[i]=texts[i]~"@";
		}

	/************XyǉXy[XŒ*****************/
		texts[i]=texts[i]~SpellCardSetting[i][1];


		while(length(texts[i])<56)
		{
			texts[i]=texts[i]~"@";
		}

	/************擾/񐔒ǉ*************************/
		AddStr=IntToString(G_Array[GetCommonData("SpellNumber",0)]);
		texts[i]=texts[i]~AddStr;

		AddStr=" / ";
		texts[i]=texts[i]~AddStr;

		AddStr=IntToString(C_Array[GetCommonData("SpellNumber",0)]);
		texts[i]=texts[i]~AddStr;
	}
	else
	{
		texts=texts~[""];
	}
	}
	/************vf폜*************************/
	descent(i in 0..length(texts))
	{
		if(texts[i]=="")
		{
			texts=erase(texts,i);
		}
	}

	if(length(texts)==0)
	{//tFCobg[hɂ悤ƂǂӂڂȂ蒼
		FavoriteMode=0;
		SetAreaCommonData("TUNING","FavoriteMode",FavoriteMode);
		bEndTitleScene = true;
		Obj_Delete(objTitleImage);
		Obj_Delete(objTitleText);
		yield;
		TTitleScene;
		return;
	}
	ascent(var iText in 0 .. length(texts))
	{
		SetSpellCardNumber(SpellName_texts[iText]);
		SpellCardInfo_Text=SpellCardInfo_Text~[texts[iText]];

		SpellCardInfo_Get=SpellCardInfo_Get~[G_Array[GetCommonData("SpellNumber",0)]];
		SpellCardInfo_Challenge=SpellCardInfo_Challenge~[C_Array[GetCommonData("SpellNumber",0)]];
	}

	//j[
	let INDEX_START = 0;
	let INDEX_REPLAY = 1;
	let INDEX_QUIT = 2;
	let selectIndex = GetAreaCommonData("TUNING","SelectIndex",0);//Iʒu
	let selectPageIndex=GetAreaCommonData("TUNING","SelectPageIndex",0);//Iʒu
	TMenuItem();//XyeLXg\

	let MaxselectPageIndex=0;
	let countMenu = 12;//sݒ
	//L[ԂZbg܂őҋ@
	while(GetVirtualKeyState(VK_OK) != KEY_FREE){yield;}

	SelectEffect();
	Explain();

	//j[I
	let frameKeyHold = 0;//L[ςȂt[
	MaxselectPageIndex=floor(length(texts)/countMenu)+1;
	if(length(texts)%countMenu==0){MaxselectPageIndex-=1;}
	let FreeCount=0;
	DemoFlag=0;
	let CanselHoldCount=0;
	loop
	{
		SetAreaCommonData("TUNING","SelectIndex",selectIndex);
		SetAreaCommonData("TUNING","SelectPageIndex",selectPageIndex);
		SetAreaCommonData("TUNING","PlayerCharacter",PlayerCharacter);
		SetAreaCommonData("TUNING","SortType",SortType);

		//
		if(GetVirtualKeyState(VK_OK) == KEY_PUSH)
		{
			SetSpellCardNumber(SpellName_texts[selectIndex+selectPageIndex*countMenu]);
			SetCommonData("SpellCardNo",GetCommonData("SpellNumber",0));
			SetCommonData("SpellCardID",selectIndex+1+selectPageIndex*countMenu);
			SetCommonData("BossName",Name_texts[selectIndex+selectPageIndex*countMenu]);
			SetCommonData("SpellCardName",SpellName_texts[selectIndex+selectPageIndex*countMenu]);
			SetCommonData("PlayerCharacter",PlayerCharacter);

			let info=SpellCardInfo_Text[selectIndex+selectPageIndex*countMenu];
			let tx=info[38..54];
			let difficult=0;
			ascent(i in 0..8)
			{
				if(tx[i*2..i*2+2]==""){difficult++;}
			}
			SetCommonData("SpellCardDifficult",difficult);
			SetCommonData("Ori_SpellCardBonus",length(SpellCardSetting[selectIndex+selectPageIndex*countMenu][1])/2*50000+100000);

			TStageScene("");

			break;
		}

		//J[\ړ
		if(GetVirtualKeyState(VK_UP) == KEY_PUSH)
		{
			selectIndex--;
		}
		else if(GetVirtualKeyState(VK_DOWN) == KEY_PUSH)
		{
			selectIndex++;
		}
		else if(GetVirtualKeyState(VK_UP) == KEY_HOLD)
		{
			frameKeyHold++;
			if(frameKeyHold == 24 || (frameKeyHold > 24 && (frameKeyHold % 8 == 0)))
			{
				selectIndex--;
			}
		}
		else if(GetVirtualKeyState(VK_DOWN) == KEY_HOLD)
		{
			frameKeyHold++;
			if(frameKeyHold == 24 || (frameKeyHold > 24 && (frameKeyHold % 8 == 0)))
			{
				selectIndex++;
			}
		}

		else if(GetVirtualKeyState(VK_LEFT) == KEY_PUSH)
		{
			selectPageIndex--;
			if(selectPageIndex<0)
			{
				selectPageIndex=MaxselectPageIndex-1;
			}
		}
		else if(GetVirtualKeyState(VK_RIGHT) == KEY_PUSH)
		{
			selectPageIndex++;
			if(selectPageIndex>=MaxselectPageIndex)
			{
				selectPageIndex=0;
			}
		}
		else if(GetVirtualKeyState(VK_LEFT) == KEY_HOLD)
		{
			frameKeyHold++;
			if(frameKeyHold == 24 || (frameKeyHold > 24 && (frameKeyHold % 8 == 0)))
			{
				selectPageIndex--;
				if(selectPageIndex<0)
				{
					selectPageIndex=MaxselectPageIndex-1;
				}
			}
		}
		else if(GetVirtualKeyState(VK_RIGHT) == KEY_HOLD)
		{
			frameKeyHold++;
			if(frameKeyHold == 24 || (frameKeyHold > 24 && (frameKeyHold % 8 == 0)))
			{
				selectPageIndex++;
				if(selectPageIndex>=MaxselectPageIndex)
				{
					selectPageIndex=0;
				}
			}
		}
		else
		{
			frameKeyHold = 0;
		}

		if(selectIndex < 0) 
		{
			if(selectPageIndex==MaxselectPageIndex-1 && length(texts)%countMenu!=0)
			{//ŏIy[W̃y[W̍s12łȂ
				selectIndex = length(texts)%countMenu-1;
			}
			else
			{
				selectIndex = countMenu - 1;
			}
		}
		else
		{
			if(selectPageIndex==MaxselectPageIndex-1 && length(texts)%countMenu!=0)
			{
				if(selectIndex > length(texts)%countMenu-1)
				{//s𒴂ĂƂ
					selectIndex = 0;
				}
			}
			selectIndex %= countMenu;
		}

		if(GetVirtualKeyState(VK_PAUSE) == KEY_PUSH)
		{//vC[LύX
			PlayerCharacter++;
			PlayerCharacter=PlayerCharacter%2;
			SetAreaCommonData("TUNING","PlayerCharacter",PlayerCharacter);

			bEndTitleScene = true;
			yield;
			TTitleScene();
			break;

		}

		if(GetVirtualKeyState(VK_USER1) == KEY_PUSH && GetVirtualKeyState(VK_SPELL) == KEY_FREE)
		{//vCIʈڍs
			yield;
			TReplaySelectScene();
			break;
		}

		if(GetVirtualKeyState(VK_USER2) == KEY_PUSH)
		{//\[g^Cv̕ύX
			SortType+=1;
			SortType=SortType%3;
			SetAreaCommonData("TUNING","SortType",SortType);

			bEndTitleScene = true;
			yield;
			TTitleScene();
			break;

		}

		if(GetVirtualKeyState(VK_SLOWMOVE) == KEY_PUSH && GetVirtualKeyState(VK_SPELL) == KEY_FREE)
		{//CɓǉA
			let F_Array=GetAreaCommonData("TUNING","Favorite",[0]);
			
			SetSpellCardNumber(SpellName_texts[selectIndex+selectPageIndex*countMenu]);
			let Num=GetCommonData("SpellNumber",0);

			if(F_Array[Num]==0)
			{
				F_Array[Num]=1;
			}
			else
			{
				F_Array[Num]=0;
			}
			SetAreaCommonData("TUNING","Favorite",F_Array);

			if(selectPageIndex==MaxselectPageIndex-1 && selectIndex == length(texts)%countMenu-1 && FavoriteMode)
			{
				selectIndex-=1;
				if(selectIndex==-1)
				{
					selectIndex=0;
					FavoriteMode=0;
					SetAreaCommonData("TUNING","FavoriteMode",FavoriteMode);
				}
			}
			SetAreaCommonData("TUNING","SelectIndex",selectIndex);
			SetAreaCommonData("TUNING","SelectPageIndex",selectPageIndex);

			bEndTitleScene = true;
			yield;
			TTitleScene();
			break;

		}
		if(GetVirtualKeyState(VK_SLOWMOVE) == KEY_PUSH && GetVirtualKeyState(VK_SPELL) == KEY_HOLD)
		{//CɓAʏ탂[hւ̈ڍs
			if(FavoriteMode==1)
			{
				FavoriteMode=0;
			}
			else
			{
				FavoriteMode=1;
			}
			SetAreaCommonData("TUNING","FavoriteMode",FavoriteMode);
			selectPageIndex=0;
			selectIndex=0;
			SetAreaCommonData("TUNING","SelectIndex",selectIndex);
			SetAreaCommonData("TUNING","SelectPageIndex",selectPageIndex);
			bEndTitleScene = true;
			yield;
			TTitleScene();
			break;
		}

		if(GetVirtualKeyState(VK_USER1) == KEY_PUSH && GetVirtualKeyState(VK_SPELL) == KEY_HOLD)
		{//ݒAʏ탂[hւ̈ڍs
/*			if(FavoriteMode==1)
			{
				SettingMode=0;
			}
			else
			{
				SettingMode=1;
			}
			SetAreaCommonData("TUNING","SettingMode",SettingMode);
			selectPageIndex=0;
			selectIndex=0;
			SetAreaCommonData("TUNING","SelectIndex",selectIndex);
			SetAreaCommonData("TUNING","SelectPageIndex",selectPageIndex);
			bEndTitleScene = true;
			yield;
			TTitleScene();
			break;
*/
			yield;
			TSettingScene();
			break;
		}
	/**********************fvC******************/
/*
		if(GetVirtualKeyState(VK_LEFT)==KEY_FREE
		&&GetVirtualKeyState(VK_RIGHT)==KEY_FREE
		&&GetVirtualKeyState(VK_UP)==KEY_FREE
		&&GetVirtualKeyState(VK_DOWN)==KEY_FREE
		&&GetVirtualKeyState(VK_PAUSE)==KEY_FREE
		)
		{
			FreeCount+=1;
			if(FreeCount==1800)
			{
				yield;
			//	DemoScene();
				SetAreaCommonData("TUNING","DemoCount",GetAreaCommonData("TUNING","DemoCount",0)+1);
				break;
			}
		}
		else{FreeCount=0;}
*/
	/**********************I******************/
		if(GetVirtualKeyState(VK_SPELL) == KEY_HOLD)
		{
			CanselHoldCount+=1;
			if(CanselHoldCount>=120){ClosePackage();}
		}
		else
		{
			CanselHoldCount=0;
		}
		yield;
	}

	bEndTitleScene = true;
	Obj_Delete(objTitleImage);
	Obj_Delete(objTitleText);

	task SelectEffect
	{//I̐GtFNg
		let x=0;
		let y=0;
		while(!bEndTitleScene)
		{
			y=39+25*selectIndex;
			Light(rand(0,640),y+rand(15,16),rand(1,2)/3,270+rand(-5,5));
			Light(rand(0,640),y+rand(1,0),rand(1,2)/3,90+rand(-5,5));
			yield;
		}

		task Light(X,Y,speed,angle)
		{
			let obj = ObjPrim_Create(OBJ_PRIMITIVE_2D);
			ObjPrim_SetTexture(obj, GetCurrentScriptDirectory~"img/effect/star.png");
			ObjPrim_SetPrimitiveType(obj, PRIMITIVE_TRIANGLESTRIP);
			ObjPrim_SetVertexCount(obj, 4);
			ObjRender_SetBlendType(obj, BLEND_ADD_RGB);
			ObjRender_SetAngleZ(obj,0);

			ObjPrim_SetVertexPosition(obj, 0, -16, -16, -0);
			ObjPrim_SetVertexPosition(obj, 1, -16, 16, -0);
			ObjPrim_SetVertexPosition(obj, 2, 16, -16, 0);
			ObjPrim_SetVertexPosition(obj, 3, 16,16, 0);

			ObjPrim_SetVertexUVT(obj, 0, 0, 0);
			ObjPrim_SetVertexUVT(obj, 1, 0, 32);
			ObjPrim_SetVertexUVT(obj, 2, 32, 0);
			ObjPrim_SetVertexUVT(obj, 3, 32, 32);
			ObjRender_SetPosition(obj,X,Y,0);

			let scale=0.5;
			let Alpha=180;
			let Zangle=0;
			let ZanglePlus=rand(-5,5);

			loop(30)
			{
				scale-=0.5/30;
				Zangle+=ZanglePlus;
				ObjRender_SetPosition(obj,ObjRender_GetX(obj)+speed*cos(angle),ObjRender_GetY(obj)+speed*sin(angle),0);
				ObjRender_SetScaleXYZ(obj,scale,scale,scale);
				ObjRender_SetAngleZ(obj,Zangle);
				ObjRender_SetColor(obj,Alpha*0.75,Alpha*0.75,Alpha);
				yield;
			}
			Obj_Delete(obj);
		}
	}

	task Explain
	{//Xy\
		UnderExplain();//ɑ\

		function CreateTextObject(let mx, let my, let text)
		{
			let obj = ObjText_Create();
			ObjText_SetText(obj, text);
			ObjText_SetFontSize(obj, 14+4);
			ObjText_SetFontBold(obj, true);
			ObjText_SetFontColorTop(obj, 255, 255, 255);
			ObjText_SetFontColorBottom(obj, 255, 160, 255);
			if(mx==504 || mx==584)
			{
				ObjText_SetFontColorBottom(obj, 160, 160, 255);
			}
			if(my==440 && mx!=584)
			{
				ObjText_SetFontColorBottom(obj, 255, 128, 128);
			}
		//	ObjText_SetFontBorderType(obj, BORDER_FULL);
			ObjText_SetFontBorderType(obj, BORDER_NONE);
			ObjText_SetFontBorderColor(obj,255, 255, 255);
			ObjText_SetFontBorderWidth(obj, 2*0);
			Obj_SetRenderPriorityI(obj, 72);
			ObjRender_SetX(obj, mx);
			ObjRender_SetY(obj, my);

			ObjText_SetFontType(obj,"lr ");

			return obj;
		}

		let objText = CreateTextObject(14, 352,"gpҁF@"~"Unknown");
		let objText2 = CreateTextObject(14, 352+20, "擾퐔@"~"N/A");
		let objText3 = CreateTextObject(14, 352+20*2, "ōXRA@@"~"N/A");
		let objText4 = CreateTextObject(14, 352+20*3, "ŒZjԁ@"~"N/A");

		let objText5 = CreateTextObject(504, 352, "Page@"~"1 / "~IntToString(MaxselectPageIndex));
		let objText6 = CreateTextObject(356, 352+20*1, "擾@@@"~"18/42");
		let objText7 = CreateTextObject(356, 352+20*2, "ōXRA@");
		let objText8 = CreateTextObject(356, 352+20*3, "jԁ@@@"~"N/A");

		let objText9 = CreateTextObject(14, 352+20*4+8, "Player@"~"@얲");

		let objText10 = CreateTextObject(584, 440,"");

		while(!bEndTitleScene)
		{
			SetSpellCardNumber(SpellName_texts[selectIndex+selectPageIndex*countMenu]);

			let C_Array=[];
			let G_Array=[];
			let S_Array=[];
			let Fi_Array=[];
			let E_Array=[];
			alternative(PlayerCharacter)
			case(0)
			{
				C_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Challenge",[]);
				G_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Get",[]);
				S_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Score",[]);
				Fi_Array=GetAreaCommonData("SPELL_RECORD","Reimu_First",[]);
				E_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Early",[]);
			}
			case(1)
			{
				C_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Challenge",[]);
				G_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Get",[]);
				S_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Score",[]);
				Fi_Array=GetAreaCommonData("SPELL_RECORD","Marisa_First",[]);
				E_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Early",[]);
			}

			if(C_Array[GetCommonData("SpellNumber",0)]!=0)
			{
				ObjText_SetText(objText, "gpҁF@"~Name_texts[selectIndex+selectPageIndex*countMenu]);
			}
			else
			{
				ObjText_SetText(objText, "gpҁF@"~"Unknown");
			}
			if(Fi_Array[GetCommonData("SpellNumber",0)]!=0)
			{
			ObjText_SetText(objText2, "擾퐔@"~IntToString(Fi_Array[GetCommonData("SpellNumber",0)]));
			}
			else
			{
				ObjText_SetText(objText2, "擾퐔@"~"N/A");
			}

			if(S_Array[GetCommonData("SpellNumber",0)]!=0)
			{
				ObjText_SetText(objText3, "ōXRA@@"~IntToString(S_Array[GetCommonData("SpellNumber",0)]));
			}
			else
			{
				ObjText_SetText(objText3, "ōXRA@@"~"N/A");
			}

			if(E_Array[GetCommonData("SpellNumber",0)]!=100000)
			{
				let TimeArray=IntToString(floor(E_Array[GetCommonData("SpellNumber",0)]*100/60));
				alternative(length(TimeArray))
				case(3){TimeArray=TimeArray[0..1]~"."~TimeArray[1..3]~" s";}
				case(4){TimeArray=TimeArray[0..2]~"."~TimeArray[2..4]~" s";}
				ObjText_SetText(objText4, "ŒZjԁ@"~TimeArray);
			}
			else
			{
				ObjText_SetText(objText4, "ŒZjԁ@"~"N/A");
			}

			ObjText_SetText(objText5, "Page@"~IntToString(selectPageIndex+1)~" / "~IntToString(MaxselectPageIndex));

			if(PlayerCharacter==0)
			{
				ObjText_SetText(objText9, "Player@"~"@얲");
			}
			else if(PlayerCharacter==1)
			{
				ObjText_SetText(objText9, "Player@"~"J@");
			}

			ObjRender_SetX(objText10,584);
			let fpslength=5;
			if(GetCurrentFps>=100){fpslength=6;ObjRender_SetX(objText10,574);}
			ObjText_SetText(objText10,vtos("3f",GetCurrentFps)[0..fpslength]);

			let TotalGet=0;
			let TotalScore=0;
			let TotalTime=0;
			ascent(i in 0..length(SpellCardSetting))
			{
				SetSpellCardNumber(SpellCardSetting[i][0]);
				if(G_Array[GetCommonData("SpellNumber",0)]>=1)
				{
					TotalGet+=1;
				}
				if(S_Array[GetCommonData("SpellNumber",0)]>=0)
				{
					TotalScore+=S_Array[GetCommonData("SpellNumber",0)];
				}
				if(E_Array[GetCommonData("SpellNumber",0)]<100000)
				{
					TotalTime+=E_Array[GetCommonData("SpellNumber",0)];
				}
			}
			ObjText_SetText(objText6, "擾@@@"~IntToString(TotalGet)~"@/@"~IntToString(length(SpellCardSetting)));
			ObjText_SetText(objText7, "ōXRA@"~IntToString(TotalScore));
			if(TotalGet==length(SpellCardSetting))
			{
				let TimeArray=IntToString(floor(TotalTime)*100/60);
				alternative(length(TimeArray))
				case(4){TimeArray=TimeArray[0..2]~"."~TimeArray[2..4]~" s";}
				case(5){TimeArray=TimeArray[0..3]~"."~TimeArray[3..5]~" s";}
				case(6){TimeArray=TimeArray[0..4]~"."~TimeArray[4..6]~" s";}
				case(7){TimeArray=TimeArray[0..5]~"."~TimeArray[5..7]~" s";}
				ObjText_SetText(objText8, "jԁ@@@"~TimeArray);
			}

			yield;
		}
		Obj_Delete(objText);
		Obj_Delete(objText2);
		Obj_Delete(objText3);
		Obj_Delete(objText4);
		Obj_Delete(objText5);
		Obj_Delete(objText6);
		Obj_Delete(objText7);
		Obj_Delete(objText8);
		Obj_Delete(objText9);
		Obj_Delete(objText10);
	}

	task UnderExplain
	{//ʉ\
		let text="Shot Decide  Pause CharacterChange  User1 Replay  User2 SortChange  Cansel_Hold Quit";
		let text2="Slow Favorite  Cansel_Hold+Slow Favorite_Mode  Cansel_Hold+User1 Setting_Mode";
		let obj = ObjText_Create();
		ObjText_SetText(obj,text);
		ObjText_SetFontSize(obj, 12);
		ObjText_SetFontBold(obj, true);
		ObjText_SetFontBorderType(obj, BORDER_NONE);
		ObjText_SetFontBorderColor(obj,255, 255, 255);
		ObjText_SetFontBorderWidth(obj, 0);
		Obj_SetRenderPriorityI(obj, 30);


		ObjRender_SetX(obj, 14);
		ObjRender_SetY(obj, 464);

		let Alpha=255;
		let AlphaAngle=270;
		let x=14;
		let x2=488;
		while(!bEndTitleScene)
		{
			ObjRender_SetX(obj, x);
			ObjRender_SetAlpha(obj,255*absolute(cos(AlphaAngle)));
			AlphaAngle+=0.5;
			if(AlphaAngle%360<90 || AlphaAngle%360>270)
			{
			ObjText_SetText(obj,text);
			}
			else
			{
			ObjText_SetText(obj,text2);
			}
			yield;
		}
		Obj_Delete(obj);
	}
}


//----------------------------------------------------
// Xe[WV[
//----------------------------------------------------
task TStageScene(let pathReplay)
{
	let dirCurrent = GetCurrentScriptDirectory();
	let dirModule = GetModuleDirectory();
	let pathMainScript = dirCurrent ~ "SpellCard/Stage.txt";
	let pathPlayer;
	if(PlayerCharacter==0)
	{
		pathPlayer = dirCurrent ~ "player/Reimu/Reimu.txt";
	}
	else if(PlayerCharacter==1)
	{
		pathPlayer = dirCurrent ~ "player/Marisa/Marisa.txt";
	}
	//--------------------------------

	//ʑJ
	RenderSceneToTransitionTexture();
	TTransition();

	SoundFlag=0;

	//--------------------------------
	//Xe[W
	InitializeStageScene();
	if(length(pathReplay) > 0)
	{
		SetStageReplayFile(pathReplay);
	}

	//--------------------------------
	//Xe[Wݒ

	let indexStage = 1+1; //Xe[WCfbNX
	SetStageIndex(indexStage);
	SetStageMainScript(pathMainScript);
	SetStagePlayerScript(pathPlayer);
	StartStageScene();

	StageMusicFlag=1;
	TStageSound;

	//--------------------------------
	//Xe[W

	MB_Save();

	loop
	{
		if(GetVirtualKeyState(VK_SHOT) == KEY_PUSH && DemoFlag==1)
		{
			TerminateStageScene();
		}
		//--------------------------------
		//ꎞ~`FbN
		if(GetVirtualKeyState(VK_PAUSE) == KEY_PUSH && DemoFlag==0)
		{
			let resPause = RunPauseScene();
			alternative(resPause)
			case(RESULT_RETRY)
			{
				//ŏ蒼
				if(!IsReplay())
				{
					//gC

					TerminateStageScene();
					TStageScene("");
					return;
				}
			}
			case(RESULT_END)
			{
				//ꎞ~̏I
				TerminateStageScene();
			}
		}

		//--------------------------------
		//Xe[W҂
		let stgSceneState = GetStageSceneState();
		if(stgSceneState == STAGE_STATE_FINISHED)
		{
			//Xe[WIʂ擾
			let stageResult = GetStageSceneResult();
			alternative(stageResult)
			case(STAGE_RESULT_CLEARED)
			{
				//Xe[WNA
				if(indexStage == 2)
				{
					//Xe[W2NAꍇ͏I
					if(IsReplay)
					{
						TEndScene();
					}
					else
					{
						TClearScene();
					}
					break;
				}
				else
				{
					//̃Xe[W֑J
					indexStage++;
					SetStageIndex(indexStage);
					SetStageMainScript(pathMainScript); //ЂƂ܂Xe[W...
					SetStagePlayerScript(pathPlayer);
					StartStageScene();
					TTransition();
				}
			}
			case(STAGE_RESULT_PLAYER_DOWN)
			{
				//@c@0
				TEndScene();
				break;
			}
			case(STAGE_RESULT_BREAK_OFF)
			{
				//Xe[WrI
				//ꎞ~̏I
				if(IsReplay)
				{
					TEndScene();
				}
				else
				{
					TTitleScene();
					T_Sound();
				}
				break;
			}
		}
		yield;
	}	

	TTransition();
}

task TStageSound
{
	let StageMusicObject=ObjSound_Create;
	SetCommonData("MusicStep",0);
	let Difficult=GetCommonData("SpellCardDifficult",1);
	if(Difficult<=4)
	{
		ObjSound_Load(StageMusicObject,GetCurrentScriptDirectory~"bgm/bgm1.ogg");
	}
	else if(Difficult<=8)
	{
		ObjSound_Load(StageMusicObject,GetCurrentScriptDirectory~"bgm/bgm2.ogg");
	}
	else
	{
		ObjSound_Load(StageMusicObject,GetCurrentScriptDirectory~"bgm/bgm3.ogg");
	}
	ObjSound_SetLoopEnable(StageMusicObject,true);
//	ObjSound_SetLoopTime(StageMusicObject,47.297,169.970);
	ObjSound_SetSoundDivision(StageMusicObject,SOUND_BGM);
	ObjSound_Play(StageMusicObject);
	ObjSound_SetRestartEnable(StageMusicObject,true);
	Obj_SetValue(StageMusicObject,"Stop",false);
	let CurrentVulume=1;
	let MaxVulume=GetAreaCommonData("TUNING","Setting",[])[0];
	while(StageMusicFlag)
	{
		if(CurrentVulume<1){CurrentVulume+=0.05;}
		if(StageMusicStopFlag)
		{
			ObjSound_Stop(StageMusicObject);
			ObjSound_SetVolumeRate(StageMusicObject,0);
			CurrentVulume=0;
		}
		else
		{
			yield;
			ObjSound_Play(StageMusicObject);
			if(GetAreaCommonData("TUNING","BGM",1)==1)
			{
				ObjSound_SetVolumeRate(StageMusicObject,MaxVulume*CurrentVulume);
			}
			else
			{
				ObjSound_SetVolumeRate(StageMusicObject,0);
			}
		}
		if(GetCommonData("BossDefeat",false))
		{
			loop(240)
			{
				CurrentVulume-=1/240;
				ObjSound_SetVolumeRate(StageMusicObject,MaxVulume*CurrentVulume);
				yield;
			}
			loop
			{
				yield;
				if(StageMusicFlag==0){break;}
			}
		}
		yield;
	}
/*
	CurrentVulume=1;
	while(CurrentVulume>0)
	{
		CurrentVulume-=1/240;
		if(StageMusicStopFlag)
		{
			ObjSound_Stop(StageMusicObject);
			//CurrentVulume=ObjSound_GetVolumeRate(StageMusicObject);
			ObjSound_SetVolumeRate(StageMusicObject,0);
		}
		else
		{
			yield;
			ObjSound_Play(StageMusicObject);
			if(GetAreaCommonData("TUNING","BGM",1)==1)
			{
				ObjSound_SetVolumeRate(StageMusicObject,100*CurrentVulume);
			}
			else
			{
				ObjSound_SetVolumeRate(StageMusicObject,0);
			}
		}
		yield;
	}
*/
	Obj_Delete(StageMusicObject);
}

//----------------------------------------------------
// IV[
//----------------------------------------------------
task TClearScene()
{
	if(IsReplay())
	{
		TTitleScene();
		T_Sound();
		return;
	}

	//--------------------------------
	//Xe[WI
	FinalizeStageScene();

	//--------------------------------
	//IV[XNvgN
	let dirModule = GetModuleDirectory();
	let pathScript = GetCurrentScriptDirectory() ~ "system/ClearScene.txt";
	let idScript = LoadScript(pathScript);
	StartScript(idScript);

	while(!IsCloseScript(idScript))
	{
		yield;
	}

	//--------------------------------
	//IV[ʏ

	MB_Save();

	let result = GetScriptResult(idScript);
	alternative(result)
	case(RESULT_SAVE_REPLAY)
	{
		//vCۑ
		TReplaySaveScene();
	}
	case(RESULT_END)
	{
		//ĐI
		TTitleScene();
		T_Sound();
	}
	case(RESULT_RETRY)
	{
		//gC
		TStageScene("");
	}
}

task TEndScene()
{
	if(DemoFlag==1)
	{
		SoundFlag=1;
		StageMusicFlag=0;
		T_Sound;
	//	TReplaySelectScene();
		TTitleScene();
		T_Sound;
		return;
	}
	if(IsReplay())
	{
		SoundFlag=1;
		StageMusicFlag=0;
		T_Sound;
		TReplaySelectScene();
	//	TTitleScene();
		return;
	}

	//--------------------------------
	//Xe[WI
	FinalizeStageScene();

	//--------------------------------
	//IV[XNvgN
	let dirModule = GetModuleDirectory();
	let pathScript = GetCurrentScriptDirectory() ~ "system/EndScene.txt";
	let idScript = LoadScript(pathScript);
	StartScript(idScript);

	while(!IsCloseScript(idScript))
	{
		yield;
	}

	//--------------------------------
	//IV[ʏ

	MB_Save();

	let result = GetScriptResult(idScript);
	alternative(result)
	case(RESULT_SAVE_REPLAY)
	{
		//vCۑ
		TReplaySaveScene();
	}
	case(RESULT_END)
	{
		//ĐI
		TTitleScene();
		T_Sound();
	}
	case(RESULT_RETRY)
	{
		//gC
		TStageScene("");
	}
}

//----------------------------------------------------
// ꎞ~V[
//----------------------------------------------------
function RunPauseScene()
{
	StageMusicStopFlag=1;
	RenderSceneToTransitionTexture();
	PauseStageScene(true);

	let dirModule = GetModuleDirectory();
//	let pathScript = dirModule ~ "script/default_system/Default_Pause.txt";
	let pathScript = GetCurrentScriptDirectory() ~ "system/Pause.txt";

	//--------------------------------
	//ꎞ~V[XNvgN
	let idScript = LoadScript(pathScript);
	StartScript(idScript);

	while(!IsCloseScript(idScript))
	{
		yield;
	}
	StageMusicStopFlag=0;
	PauseStageScene(false);

	let res = GetScriptResult(idScript);
	return res;
}


//----------------------------------------------------
// vCIV[
//----------------------------------------------------
task TReplaySelectScene()
{
	let dirCurrent = GetCurrentScriptDirectory();
	let pathScript = dirCurrent ~ "system/ReplaySelectScene.txt";

	//--------------------------------
	//vCIV[XNvgN
	let idScript = LoadScript(pathScript);
	StartScript(idScript);

	while(!IsCloseScript(idScript))
	{
		yield;
	}

	//--------------------------------
	//vCIV[ʏ
	let result = GetScriptResult(idScript);

	if(length(result) == 0)
	{
		//^CgV[֖߂
		TTitleScene();
	}
 	else
 	{
		//vCĐJn
		TStageScene(result);
	}
}


//----------------------------------------------------
// fV[
//----------------------------------------------------
task DemoScene()
{
	DemoFlag=1;
	let dirCurrent = GetCurrentScriptDirectory();
	let pathScript = dirCurrent ~ "system/DemoScene.txt";

	//--------------------------------
	//vCIV[XNvgN
	let idScript = LoadScript(pathScript);
	StartScript(idScript);

	while(!IsCloseScript(idScript))
	{
		yield;
	}

	//--------------------------------
	//vCIV[ʏ
	let result = GetScriptResult(idScript);

	TStageScene(result);
}

//----------------------------------------------------
// vCۑV[
//----------------------------------------------------
task TReplaySaveScene()
{
	let dirCurrent = GetCurrentScriptDirectory();
	let pathScript = dirCurrent ~ "system/ReplaySaveScene.txt";

	//--------------------------------
	//vCۑV[XNvgN
	let idScript = LoadScript(pathScript);
	StartScript(idScript);

	while(!IsCloseScript(idScript))
	{
		yield;
	}


	//--------------------------------
	//^CgV[֑J
	TTitleScene();
	T_Sound;
}

//----------------------------------------------------
// ݒV[
//----------------------------------------------------
task TSettingScene()
{
	let dirCurrent = GetCurrentScriptDirectory();
	let pathScript = dirCurrent ~ "system/SettingScene.txt";

	//--------------------------------
	//vCIV[XNvgN
	let idScript = LoadScript(pathScript);
	StartScript(idScript);

	while(!IsCloseScript(idScript))
	{
		yield;
	}

	//--------------------------------
	//vCIV[ʏ
	let result = GetScriptResult(idScript);

	if(length(result) == 0)
	{
		//^CgV[֖߂
		TTitleScene();
	}
 	else
 	{//gpȂ		
		TStageScene(result);
	}
}

//----------------------------------------------------
// ʑJڃGtFNg
//----------------------------------------------------
function RenderSceneToTransitionTexture()
{
	//݂̃V[eʑJڗpeNX`ɕ`
	let textureName = GetTransitionRenderTargetName();
	RenderToTextureA1(textureName, 0, 100, true);
}

task TTransition
{
	let textureName = GetTransitionRenderTargetName();

	let objImage = ObjPrim_Create(OBJ_SPRITE_2D); //2DXvCgIuWFNg
	Obj_SetRenderPriorityI(objImage, 100); //`Dxݒ
	ObjPrim_SetTexture(objImage, textureName); //eNX`ݒ
	ObjSprite2D_SetSourceRect(objImage, 0, 0, 640, 480);
	ObjSprite2D_SetDestRect(objImage, 0, 0, 640, 480);

	let alpha = 255;
	while(alpha > 0)
	{
		ObjRender_SetAlpha(objImage, alpha);
		alpha -= 16;
		yield;
	}
	Obj_Delete(objImage);
}

function MB_Save
{
	if(!IsReplay())
	{
		SaveCommonDataAreaA1("SPELL_RECORD");
		SaveCommonDataAreaA1("TUNING");
	}
}